namespace IQIGame.Onigao.GamePlay
{
    /// <summary>
    /// 用于系统模块内部核心控制器的基类，具体使用场景见父类注释
    /// 
    /// 与父类TController的区别：更加业务化，包含了更多玩法规范，建议视图层玩法都用TModuleController
    /// 如果要直接使用TController，则需要自己处理相关规范的约束
    /// 
    /// Root控制器除外，因为Root控制器可能需要一些管理Sub Controller的逻辑，直接用TController更能干净灵活的处理管理代码
    /// </summary>
    public abstract class TModuleController : TController
    {
        protected override void OnControllerEvent(TControllerEvent evt)
        {
            switch (evt)
            {
                case TControllerEvent.OnModuleGameplayInit:
                    OnModuleGameplayInit();
                    break;
                case TControllerEvent.OnSceneLoaded:
                    OnSceneLoaded();
                    break;
                default:
                    break;
            }
        }

        protected abstract void OnModuleGameplayInit();
        protected abstract void OnSceneLoaded();
    }
}
